<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // const test1 = function(){   }
        // 1 在堆内存开辟了一个空间  
        // 2. 把函数的代码放到了空间内 
        // 3. 在栈内存开辟一个空间  起名test1 也就是函数名  
        // 4. 把堆内存的地址 放到 test1所在的栈内存中

        // 只要创建函数 必然占据空间  

        // var person = {
        //     name:'张三',
        //     eat:function(){

        //     },
        //     sing:function(){

        //     }
        // }

        // 也会开辟两个空间  


        // 函数内写函数 

        // function fn1(){
        //     const fn2 = function(){

        //     }
        // }

        // fn1();
        // fn1();
        // fn1();
        // fn1();

        // 只要调用fn1 都会开辟一次空间 给fn2


        // 在构造函数中写函数  

        // var obj  = {
        //     name:'张三',
        //     eat(){
        //         console.log(this.name + '正在吃')
        //     }
        // }

        // obj.eat()

        function Person(name){
            this.name = name
            this.sing = function(){
                console.log(this.name+'正在唱歌')
            }
        }


        var o1 = new Person('张三');
        o1.sing(); // 每次创建对象 都要开辟一个新的空间  
        var o2 = new Person('李四');
        o2.sing();// 每次创建对象 都要开辟一个新的空间  
        var o3 = new Person('王五');
        o3.sing();// 每次创建对象 都要开辟一个新的空间  


        console.log(o1.sing === o2.sing);




    </script>
</body>
</html>